home *** CD-ROM | disk | FTP | other *** search
/ Aminet 38 / Aminet 38 (2000)(Schatztruhe)[!][Aug 2000].iso / Aminet / dev / misc / drophunk.lha / DropHunk / Source / DropHunk.asm
Encoding:
Assembly Source File  |  1998-11-30  |  25.1 KB  |  1,459 lines

  1. ************************************************************
  2. *
  3. ** DropHunk
  4. *
  5. ** Version 1.0
  6. *
  7. ** November, 29th 1998
  8. *
  9. ** Author: Joerg van de Loo (ONIX)
  10. **       Hoevel 15
  11. **       47559 Kranenburg
  12. **       Germany
  13. *
  14. *
  15. ** DropHunk is a CLI only tool to drop the important settings
  16. ** of an AmigaDOS load or linker file.   Not  all  hunk-types
  17. ** are currently supported, anyhow, it works well.
  18. *
  19. *
  20. ** Written with HiSoft's Devpac Amiga 3
  21. *
  22.  
  23.  
  24.     OUTPUT    RAM:DropHunk
  25.  
  26.  
  27.     include    dos/doshunks.i            Not in my 'system.gs' file...
  28.  
  29.     include    RAD:include/CLIStartup.asm
  30.  
  31.  
  32.  
  33.     STRUCTURE    Table,108
  34.  
  35.     ALIGNLONG
  36.     STRUCT    _FIB,fib_SIZEOF
  37.     ALIGNLONG
  38.  
  39.     ULONG    _SPSave
  40.  
  41.     BPTR    _LockSave
  42.  
  43.     ULONG    _SPBufCnt
  44.     STRUCT    _SPBuffer,80
  45.  
  46.     STRUCT    _HunkNameBuf,128
  47.  
  48.     ULONG    _NumHunk
  49.     ULONG    _HunkSize
  50.     ULONG    _HunkType
  51.     ULONG    _FileHandle
  52.  
  53.     ULONG    _HunkNo
  54.  
  55.     APTR    _StrCache
  56.     ULONG    _CacheFlag
  57.     ULONG    _CachedSize
  58.  
  59.     ULONG    _ByteSize
  60.     ULONG    _Relocs
  61.     ULONG    _FileType
  62.  
  63.     LABEL    _TableSize
  64.  
  65.  
  66. CacheSize    EQU    31*1024
  67. FlushSize    EQU    30*1024
  68.  
  69.  
  70.     opt    p+                Ensure pc-relative code
  71.  
  72. _main
  73.     move.l    A7,_SPSave(A5)
  74.  
  75.     tst.l    arg_1(A5)            Any argument?
  76.     beq.w    _return
  77.  
  78.     move.l    arg_1(A5),D1
  79.     moveq    #ACCESS_READ,D2
  80.     movea.l    _DOSBase(A5),A6
  81.     jsr    _LVOLock(A6)            Attempt to get access to the file
  82.     move.l    D0,_LockSave(A5)
  83.     move.l    D0,D2
  84.  
  85.     jsr    _LVOIoErr(A6)
  86.     move.l    D0,_errno(A5)
  87.  
  88.     tst.l    D2
  89.     beq.w    _return
  90.  
  91.     move.l    D2,D1
  92.     lea    _FIB(A5),A2
  93.     move.l    A2,D2
  94.     jsr    _LVOExamine(A6)
  95.  
  96.     move.l    #212,D0
  97.     move.l    D0,_errno(A5)
  98.  
  99.     move.l    _LockSave(A5),D1
  100.     jsr    _LVOUnLock(A6)
  101.  
  102.     tst.l    fib_DirEntryType(A2)
  103.     bpl.w    _return    
  104.  
  105.     move.l    arg_1(A5),D1
  106.     move.l    #MODE_OLDFILE,D2
  107.     movea.l    _DOSBase(A5),A6
  108.     jsr    _LVOOpen(A6)            Attempt to get access to the file
  109.     move.l    D0,_FileHandle(A5)
  110.     move.l    D0,D2
  111.  
  112.     jsr    _LVOIoErr(A6)
  113.     move.l    D0,_errno(A5)
  114.  
  115.     tst.l    D2
  116.     beq.s    _return
  117.  
  118.     move.l    _stdout(A5),D1
  119.     jsr    _LVOIsInteractive(A6)        Output to an interactive terminal?
  120.     tst.l    D0
  121.     bne.s    2$                No, seems to be standard console window
  122.  
  123.     moveq    #1,D0
  124.     move.l    D0,_CacheFlag(A5)        Set 'Cache' flag
  125.  
  126.     move.l    #CacheSize,D0
  127.     move.l    #MEMF_CLEAR,D1
  128.     movea.l    _SysBase(A5),A6
  129.     jsr    _LVOAllocMem(A6)        Memory demand
  130.     move.l    D0,_StrCache(A5)
  131.     bne.s    2$
  132. 1$
  133.     clr.l    _CacheFlag(A5)
  134. 2$
  135.     movea.l    _DOSBase(A5),A6
  136.     bsr.s    _HunkSearch            Fire up parsing
  137.  
  138. _close
  139.     move.l    _FileHandle(A5),D1
  140.     movea.l    _DOSBase(A5),A6
  141.     jsr    _LVOClose(A6)            Close the file
  142.  
  143.     tst.l    _CacheFlag(A5)
  144.     beq.s    _return
  145.  
  146.     bsr.w    _FlushCache            Print characters of buffer
  147.  
  148.     movea.l    _StrCache(A5),A1
  149.     move.l    #CacheSize,D0
  150.     movea.l    _SysBase(A5),A6
  151.     jsr    _LVOFreeMem(A6)            Free the 'Cache'
  152.  
  153. _return
  154.     move.l    _SPSave(A5),A7
  155.     rts
  156.  
  157.  
  158. _HunkSearch
  159.     bsr.w    _GetCurrentHunk            Get first longword of file
  160.     cmpi.l    #HUNK_HEADER,D0            HunkHeader indicates a load file
  161.     beq.s    .exeFile
  162.     cmpi.l    #HUNK_UNIT,D0
  163.     beq.s    .lnkFile            else a linker file
  164.     bra.w    .error
  165.  
  166. .exeFile
  167.     lea    _FIB(A5),A0
  168.     move.l    fib_Size(A0),-(sp)
  169.     pea    fib_FileName(A0)
  170. *    move.l    arg_1(A5),-(sp)
  171.     pea    _ExeObjStr(pc)
  172.     bsr.w    _SPrintF
  173.     lea    12(sp),sp
  174.  
  175.     pea    _StartHunkStr(pc)
  176.     bsr.w    _SPrintF
  177.     addq.l    #4,sp
  178.  
  179.     move.l    _HunkType(A5),D0
  180.     move.l    D0,_FileType(A5)
  181.     bsr.w    _HunkAnalyse            Start analysing the file...
  182.     tst.l    D0
  183.     beq.s    .done
  184.     pea    _ErrorStr(pc)
  185.     bsr.w    _SPrintF
  186.     addq.l    #4,sp
  187.     rts
  188.  
  189. .lnkFile
  190.     lea    _FIB(A5),A0
  191.     move.l    fib_Size(A0),-(sp)
  192.     pea    fib_FileName(A0)
  193. *    move.l    arg_1(A5),-(sp)
  194.     pea    _LnkObjStr(pc)
  195.     bsr.w    _SPrintF
  196.     lea    12(sp),sp
  197.  
  198.     pea    _StartHunkStr(pc)
  199.     bsr.w    _SPrintF
  200.     addq.l    #4,sp
  201.  
  202.     move.l    _HunkType(A5),D0
  203.     bsr.w    _HunkAnalyse            Start analysing the file...
  204.  
  205.     tst.l    D0
  206.     beq.s    .done
  207.     pea    _ErrorStr(pc)
  208.     bsr.w    _SPrintF
  209.     addq.l    #4,sp
  210.     rts
  211. .done
  212.     pea    _OkStr(pc)
  213.     bsr.w    _SPrintF
  214.     addq.l    #4,sp
  215.  
  216.     bsr.w    _PrintResult
  217.  
  218.     rts
  219.  
  220. .error
  221.     moveq    #-1,D0
  222.     rts
  223.  
  224. _PrintOneTab    ;                Drop the ASCII character TAB
  225.     movem.l    D0-D3/A0-A1,-(sp)        but don't trash any registers
  226.  
  227.     tst.l    _CacheFlag(A5)            Where to place the character?
  228.     beq.s    .console
  229.  
  230.     movea.l    _StrCache(A5),A0
  231.     move.l    _CachedSize(A5),D0
  232.     move.b    #9,0(A0,D0.w)
  233.     addq.w    #1,D0
  234.     move.l    D0,_CachedSize(A5)
  235.     cmpi.w    #FlushSize,D0
  236.     bls.s    1$
  237.  
  238.     bsr.s    _FlushCache
  239.     bra.s    1$
  240.  
  241. .console
  242.  
  243.     clr.l    -(sp)
  244.     movea.l    sp,A0
  245.     move.b    #9,(A0)
  246.  
  247.     move.l    _stdout(A5),D1
  248.     move.l    A0,D2
  249.     moveq    #1,D3
  250.     movea.l    _DOSBase(A5),A6
  251.     jsr    _LVOWrite(A6)
  252.  
  253.     addq.l    #4,sp
  254. 1$
  255.     movem.l    (sp)+,D0-D3/A0-A1
  256.     rts
  257.  
  258. _PrintLF    ;                Drop the ASCII character LF
  259.     movem.l    D0-D3/A0-A1,-(sp)        but don't trash any registers
  260.  
  261.     tst.l    _CacheFlag(A5)            Where to place the character?
  262.     beq.s    .console
  263.  
  264.     movea.l    _StrCache(A5),A0
  265.     move.l    _CachedSize(A5),D0
  266.     move.b    #10,0(A0,D0.w)
  267.     addq.w    #1,D0
  268.     move.l    D0,_CachedSize(A5)
  269.     cmpi.w    #FlushSize,D0
  270.     bls.s    1$
  271.  
  272.     bsr.s    _FlushCache
  273.     bra.s    1$
  274.  
  275. .console
  276.  
  277.     clr.l    -(sp)
  278.     movea.l    sp,A0
  279.     move.b    #10,(A0)
  280.  
  281.     move.l    _stdout(A5),D1
  282.     move.l    A0,D2
  283.     moveq    #1,D3
  284.     movea.l    _DOSBase(A5),A6
  285.     jsr    _LVOWrite(A6)
  286.  
  287.     addq.l    #4,sp
  288. 1$
  289.     movem.l    (sp)+,D0-D3/A0-A1
  290.     rts
  291.  
  292. _FlushCache    ;                As it tells...
  293.     movem.l    D2-D3/A6,-(sp)
  294.     move.l    _stdout(A5),D1
  295.     move.l    _StrCache(A5),D2
  296.     move.l    _CachedSize(A5),D3
  297.     movea.l    _DOSBase(A5),A6
  298.     jsr    _LVOWrite(A6)
  299.     clr.l    _CachedSize(A5)
  300.     movem.l    (sp)+,D2-D3/A6
  301.     rts
  302.  
  303.  
  304. _GetHunkLength        ;            Read a single longword into 'HunkSize' var
  305.     move.l    _FileHandle(A5),D1
  306.     lea    _HunkSize(A5),A0
  307.     move.l    A0,D2
  308.     moveq    #4,D3
  309.     movea.l    _DOSBase(A5),A6
  310.     jsr    _LVORead(A6)
  311.     tst.l    D0
  312.     bmi.s    .error
  313.  
  314.     move.l    _HunkSize(A5),D0
  315.     rts
  316.  
  317. .error
  318.     moveq    #-1,D0
  319.     move.l    D0,_HunkType(A5)
  320.     rts
  321.  
  322. _GetCurrentHunk        ;            Read a single longword into 'HunkType' var
  323.     move.l    _FileHandle(A5),D1
  324.     lea    _HunkType(A5),A0
  325.     move.l    A0,D2
  326.     moveq    #4,D3
  327.     movea.l    _DOSBase(A5),A6
  328.     jsr    _LVORead(A6)
  329.     tst.l    D0
  330.     bmi.s    .error
  331.     beq.s    .error
  332.  
  333.     move.l    _HunkType(A5),D0
  334.     rts
  335.  
  336. .error
  337.     moveq    #-1,D0
  338.     move.l    D0,_HunkType(A5)
  339.     rts
  340.  
  341. _GetHunkName        ;            Read name of hunk into 'HunkNameBuf'
  342.     move.l    _FileHandle(A5),D1        Size in longwords of name in register D0
  343.     lea    _HunkNameBuf(A5),A0
  344.     move.l    A0,D2
  345.     move.l    D0,D3
  346.     lsl.l    #2,D3
  347.     movem.l    D3/A0,-(sp)
  348.     movea.l    _DOSBase(A5),A6
  349.     jsr    _LVORead(A6)
  350.     tst.l    D0
  351.     bmi.s    .error
  352.  
  353.     movem.l    (sp)+,D1/A0
  354.     clr.b    0(A0,D1.w)
  355.  
  356.     lea    _HunkNameBuf(A5),A0
  357.     moveq    #-1,D0
  358. .tst
  359.     tst.b    (A0)+
  360.     dbeq    D0,.tst
  361.     not.l    D0                Return length of name in bytes
  362.     rts
  363.  
  364. .error
  365.     moveq    #-1,D0
  366.     move.l    D0,_HunkType(A5)
  367.     rts
  368.  
  369. _SkipHunk    ;                Overread datas of file
  370.     move.l    _FileHandle(A5),D1        Number of longwords to ignore in register D0
  371.     move.l    D0,D2
  372.     lsl.l    #2,D2
  373.     andi.l    #$7FFFFFFF,D2
  374.     moveq    #OFFSET_CURRENT,D3
  375.     movea.l    _DOSBase(A5),A6
  376.     jsr    _LVOSeek(A6)
  377.     tst.l    D0
  378.     bmi.s    .error
  379.  
  380.     moveq    #0,D0
  381.     rts
  382.  
  383. .error
  384.     moveq    #-1,D0
  385.     rts
  386.  
  387.  
  388. _HunkAnalyse        ;            D0 = Hunk type
  389.     move.l    D0,D1                HUNK
  390.     andi.w    #$3FF,D1            Without extensions
  391.     subi.l    #$3E7,D1            Convert it into index
  392.     bmi.s    .error
  393.     cmpi.w    #24,D1
  394.     bhi.s    .error
  395.     
  396.     move.l    D1,D2                Index
  397.     move.l    D2,D3                Index
  398.     add.w    D3,D3                Index² * 2
  399.     moveq    #4,D4
  400.     lsl.w    D4,D2                Index¹ * 4
  401.     add.w    D3,D2                Index  * 18
  402.  
  403.     lea    _HunkNames(pc),A0
  404.     lea    0(A0,D2.w),A0            String
  405.  
  406.     move.w    D1,D2                Index
  407.     add.w    D2,D2                * 2
  408.     lea    _HunkActions(pc),A1
  409.     move.w    0(A1,D2.w),D2
  410.     jmp    0(A1,D2.w)            Jump to appropriate sub-routine
  411.  
  412. .error
  413.     moveq    #-1,D0
  414.     rts
  415.  
  416. DEFAC    MACRO
  417.     dc.w    _\1-_HunkActions
  418.     ENDM
  419.  
  420. _HunkActions        ;            Jump-table
  421.     DEFAC    HunkUnit
  422.     DEFAC    HunkName
  423.     DEFAC    HunkCode
  424.     DEFAC    HunkData
  425.     DEFAC    HunkBSS
  426.     DEFAC    HunkReloc32
  427.     DEFAC    HunkReloc16
  428.     DEFAC    HunkReloc8
  429.     DEFAC    HunkExtern
  430.     DEFAC    HunkSymbol
  431.     DEFAC    HunkDebug
  432.     DEFAC    HunkEnd
  433.     DEFAC    HunkHeader
  434.     DEFAC    HunkUnknown
  435.     DEFAC    HunkOverlay
  436.     DEFAC    HunkBreak
  437.     DEFAC    HunkDRel32
  438.     DEFAC    HunkDRel16
  439.     DEFAC    HunkDRel8
  440.     DEFAC    HunkLib
  441.     DEFAC    HunkIndex
  442.     DEFAC    HunkReloc32Short
  443.     DEFAC    HunkRelReloc32
  444.     DEFAC    HunkRelReloc16
  445.  
  446. * ################################################################
  447.  
  448. _HunkUnit    ; A0 -string
  449.     bsr.w    _PrintOneTab
  450.  
  451.     move.l    A0,-(sp)
  452.     bsr.w    _SPrintF
  453.     addq.l    #4,sp
  454.  
  455.     bsr.w    _GetHunkLength            Length name of defintition
  456.     cmpi.l    #-1,D0
  457.     beq.s    .error
  458.     tst.l    D0
  459.     beq.s    .done
  460.  
  461.     bsr.w    _GetHunkName            Get the name of this definition
  462.     cmpi.l    #-1,D0
  463.     beq.s    .error
  464.  
  465.     pea    _HunkNameBuf(A5)
  466.     pea    _NameStr(pc)
  467.     bsr.w    _SPrintF            Write down the name
  468.     addq.l    #8,sp
  469.  
  470. .done
  471.     bsr.w    _PrintLF
  472.     bsr.w    _GetCurrentHunk            Get next hunk
  473.     bra.w    _HunkAnalyse            and re-run
  474. .error
  475.     rts
  476.  
  477.  
  478. _HunkName
  479.     bra.s    _HunkUnit            Same as HunkUnit...
  480.  
  481. * ################################################################
  482.  
  483. _HunkCode
  484.     move.l    D0,D6                Original hunk with memory-flags set
  485.     bsr.w    _PrintOneTab
  486.  
  487.     move.l    A0,-(sp)
  488.     bsr.w    _SPrintF
  489.     addq.l    #4,sp
  490.  
  491.     bsr.w    _GetHunkLength            Amount longwords of this segment (pure datas)
  492.     cmpi.l    #-1,D0
  493.     beq.s    .error
  494.     tst.l    D0
  495.     beq.s    .done
  496.  
  497.     lsl.l    #2,D0
  498.     add.l    D0,_ByteSize(A5)
  499.     move.l    D0,-(sp)
  500.     pea    _CodeStr(pc)
  501.     bsr.w    _SPrintF
  502.     addq.l    #8,sp    
  503.  
  504. .testFast        ;            Check the set memory-flags...
  505.     btst    #31,D6
  506.     beq.s    .testChip
  507.  
  508.     pea    _HunkFastStr(pc)
  509.     bsr.w    _SPrintF
  510.     addq.l    #4,sp
  511.  
  512. .testChip
  513.     btst    #30,D6
  514.     beq.s    .testAdvi
  515.     
  516.     pea    _HunkChipStr(pc)
  517.     bsr.w    _SPrintF
  518.     addq.l    #4,sp
  519.  
  520. .testAdvi
  521.     btst    #29,D6
  522.     beq.s    .done
  523.  
  524.     pea    _HunkAdviStr(pc)
  525.     bsr.w    _SPrintF
  526.     addq.l    #4,sp
  527.  
  528. .done
  529.     bsr.w    _PrintLF
  530.     move.l    _HunkSize(A5),D0        Amount longwords of segment
  531.     bsr.w    _SkipHunk            Overread them
  532.     bsr.w    _GetCurrentHunk            Get current hunk
  533.     bra.w    _HunkAnalyse            and re-run
  534.  
  535. .error
  536.     moveq    #-1,D0
  537.     rts
  538. * ################################################################
  539.  
  540. _HunkData
  541.     bra.s    _HunkCode            Same as HunkCode
  542.  
  543. * ################################################################
  544.  
  545. _HunkBSS
  546.     move.l    D0,D6                Original hunk with memory-flags set
  547.     bsr.w    _PrintOneTab
  548.  
  549.     move.l    A0,-(sp)
  550.     bsr.w    _SPrintF
  551.     addq.l    #4,sp
  552.  
  553.     bsr.w    _GetHunkLength            Get amount longwords of empty data words
  554.     cmpi.l    #-1,D0
  555.     beq.s    .error
  556.     tst.l    D0
  557.     beq.s    .done
  558.  
  559.     lsl.l    #2,D0
  560.     add.l    D0,_ByteSize(A5)
  561.     move.l    D0,-(sp)
  562.     pea    _CodeStr(pc)
  563.     bsr.w    _SPrintF
  564.     addq.l    #8,sp    
  565.  
  566. .testFast        ;            Check the set memory-flags...
  567.     btst    #31,D6
  568.     beq.s    .testChip
  569.  
  570.     pea    _HunkFastStr(pc)
  571.     bsr.w    _SPrintF
  572.     addq.l    #4,sp
  573.  
  574. .testChip
  575.     btst    #30,D6
  576.     beq.s    .testAdvi
  577.     
  578.     pea    _HunkChipStr(pc)
  579.     bsr.w    _SPrintF
  580.     addq.l    #4,sp
  581.  
  582. .testAdvi
  583.     btst    #29,D6
  584.     beq.s    .done
  585.  
  586.     pea    _HunkAdviStr(pc)
  587.     bsr.w    _SPrintF
  588.     addq.l    #4,sp
  589.  
  590. .done
  591.     bsr.w    _PrintLF
  592.     bsr.w    _GetCurrentHunk            Get next hunk
  593.     bra.w    _HunkAnalyse            and re-run
  594.  
  595. .error
  596.     moveq    #-1,D0
  597.     rts
  598.  
  599. * ################################################################
  600.  
  601. _HunkReloc32
  602.     bsr.w    _PrintOneTab
  603.  
  604.     move.l    A0,-(sp)
  605.     bsr.w    _SPrintF
  606.     addq.l    #4,sp
  607.  
  608.     bsr.w    _PrintLF
  609. .loop
  610.     bsr.w    _GetHunkLength
  611.     cmpi.l    #-1,D0
  612.     beq.s    .error
  613.     tst.l    D0
  614.     beq.s    .done
  615.  
  616.     move.l    D0,D4                Number of relocations
  617.     add.l    D0,_Relocs(A5)
  618.     bsr.w    _GetHunkLength
  619.     cmpi.l    #-1,D0
  620.     beq.s    .error
  621.  
  622.     move.l    D0,D5                Related to hunk 'n'
  623.  
  624.     move.l    D5,-(sp)
  625.     move.l    D4,-(sp)
  626.     pea    _Reloc32Str(pc)
  627.     bsr.w    _SPrintF
  628.     lea    12(sp),sp
  629.  
  630.     move.l    D4,D0
  631.     bsr.w    _SkipHunk            Overread relocation datas
  632.  
  633.     bra.s    .loop
  634.  
  635. .done
  636.     bsr.w    _GetCurrentHunk            Get next hunk
  637.     bra.w    _HunkAnalyse            and re-run
  638.  
  639. .error
  640.     moveq    #-1,D0
  641.     rts
  642.  
  643. * ################################################################
  644.  
  645. _HunkReloc16
  646.     bra.s    _HunkReloc32
  647.  
  648. * ################################################################
  649.  
  650. _HunkReloc8
  651.     bra.s    _HunkReloc32
  652.  
  653. * ################################################################
  654.  
  655. _HunkExtern
  656.     bsr.w    _PrintOneTab
  657.  
  658.     move.l    A0,-(sp)
  659.     bsr.w    _SPrintF
  660.     addq.l    #4,sp
  661.  
  662.     bsr.w    _PrintLF
  663. .loop
  664.     bsr.w    _GetHunkLength            Get EXT_xxx type
  665.     tst.l    D0
  666.     beq.w    .done
  667.  
  668.     cmpi.l    #-1,D0
  669.     beq.w    .error
  670.  
  671.     move.l    D0,D1                Remember it in D1
  672.     andi.l    #$FFFFFF,D0            Amount of longwords
  673.     move.l    D0,_HunkSize(A5)
  674.  
  675.     clr.w    D1
  676.     swap    D1
  677.     lsr.w    #8,D1
  678.     andi.l    #$FF,D1                EXT_xxx type (in D0.b)
  679.     lea    _ExtNames(pc),A0
  680.     cmpi.b    #3,D1
  681.     bls.w    .symref                sym/def/abs/res
  682.  
  683.     cmpi.w    #130,D1
  684.     beq.w    .common                com (not really supported !!!!)
  685. .
  686.     subi.w    #125,D1                Create index to strings
  687.     bmi.w    .error
  688.     cmpi.w    #15,D0
  689.     bhi.w    .error
  690.  
  691.     move.l    D1,D2
  692.     move.l    D1,D3
  693.     lsl.w    #2,D2
  694.     lsl.w    #3,D1
  695.     add.w    D2,D1
  696.     add.w    D3,D1                Result equal to: D1 * 13
  697.  
  698. .comref
  699.     bsr.w    _PrintOneTab
  700.  
  701.     pea    0(A0,D1.w)
  702.     pea    _NameStr(pc)            ref32/ref16/ref8 etc.
  703.     bsr.w    _SPrintF
  704.     addq.l    #8,sp
  705.  
  706.     move.l    _HunkSize(A5),D0        Get the name of this
  707.     bsr.w    _GetHunkName
  708.     cmpi.l    #-1,D0
  709.     beq.w    .error
  710.     move.l    D0,D2
  711.  
  712.     pea    _HunkNameBuf(A5)
  713.     pea    _NameStr(pc)
  714.     bsr.w    _SPrintF            Write down name
  715.     addq.l    #8,sp
  716.  
  717.     cmpi.b    #7,D2
  718.     bhi.s    .nameok0
  719.  
  720.     bsr.w    _PrintOneTab
  721.  
  722. .nameok0
  723.     bsr.w    _GetHunkLength            Amount entries for references
  724.     cmpi.l    #-1,D0
  725.     beq.w    .error
  726.  
  727.     move.l    D0,D4                Number of references
  728.     move.l    D0,-(sp)
  729.     pea    _RefStr(pc)
  730.     bsr.w    _SPrintF
  731.     addq.l    #8,sp
  732.     bra.s    .refloopcheck
  733.  
  734. .refloop
  735.     bsr.w    _GetHunkLength            Absolute value of reference
  736.     cmpi.l    #-1,D0
  737.     beq.w    .error
  738.  
  739.     move.l    D0,-(sp)
  740.     pea    _CorrectStr(pc)
  741.     bsr.w    _SPrintF
  742.     addq.l    #8,sp
  743.  
  744. .refloopcheck
  745.     subq.w    #1,D4
  746.     bcc.s    .refloop
  747.  
  748.     bsr.w    _PrintLF
  749.     bra.w    .loop
  750.  
  751. .symref            ;            sym/def/abs/res
  752.     move.l    D1,D4
  753.  
  754.     bsr.w    _PrintOneTab
  755.  
  756.     move.l    D1,D2
  757.     move.l    D1,D3
  758.     lsl.w    #2,D2
  759.     lsl.w    #3,D1
  760.     add.w    D2,D1
  761.     add.w    D3,D1
  762.  
  763.     pea    0(A0,D1.w)
  764.     pea    _NameStr(pc)
  765.     bsr.w    _SPrintF
  766.     addq.l    #8,sp
  767.  
  768.     tst.b    D4
  769.     beq.s    .sym_tab            Only a EXT_sym(bol)
  770.  
  771. .goon
  772.     move.l    _HunkSize(A5),D0        Name of this
  773.     bsr.w    _GetHunkName
  774.     cmpi.l    #-1,D0
  775.     beq.w    .error
  776.     move.l    D0,D2
  777.  
  778.      pea    _HunkNameBuf(A5)
  779.     pea    _NameStr(pc)
  780.     bsr.w    _SPrintF            Give out name
  781.     addq.l    #8,sp
  782.  
  783.     cmpi.b    #7,D2
  784.     bhi.s    .nameok
  785.  
  786.     bsr.w    _PrintOneTab
  787.  
  788. .nameok
  789.     bsr.w    _GetHunkLength
  790.     cmpi.l    #-1,D0
  791.     beq.w    .error
  792.  
  793.     move.l    D0,-(sp)            Which EXT_xxx type?
  794.     cmpi.b    #2,D4                EXT_abs(olute)?
  795.     bne.s    .offset
  796.  
  797.     tst.l    D0
  798.     bmi.s    .dec                Negative value - then give our as decimaL
  799.  
  800.     cmpi.l    #$400,D0            Greater then 1024?
  801.     bls.s    .dec                If not the give out as decimal
  802.  
  803.     pea    _DefHexStr(pc)            else as hexadecimal
  804.     bra.s    .textset
  805.  
  806. .dec
  807.     pea    _DefDecStr(pc)            Here goes the decimal...
  808.     bra.s    .textset
  809.  
  810. .offset
  811.     pea    _OffsetStr(pc)            else it is an offset related value
  812.  
  813. .textset
  814.     bsr.w    _SPrintF
  815.     addq.l    #8,sp
  816.  
  817.     bsr.w    _PrintLF
  818.     bra.w    .loop
  819.  
  820. .sym_tab
  821.     move.l    _HunkSize(A5),D5        Original length of this hunk
  822.  
  823.     bsr.w    _GetHunkLength
  824.     cmpi.l    #-1,D0
  825.     beq.s    .error
  826.     tst.l    D0
  827.     beq.s    .ignore
  828.  
  829.     move.l    _FileHandle(A5),D1
  830.     moveq    #-4,D2
  831.     moveq    #OFFSET_CURRENT,D3
  832.     jsr    _LVOSeek(A6)            We were one longword too far
  833.  
  834.     move.l    D5,_HunkSize(A5)
  835.     bra.w    .goon
  836.  
  837. .ignore
  838.     move.l    _FileHandle(A5),D1
  839.     moveq    #-4,D2
  840.     moveq    #OFFSET_CURRENT,D3
  841.     jsr    _LVOSeek(A6)            We were one longword too far
  842.  
  843.     bsr.w    _PrintLF
  844.     bra.w    .loop
  845.  
  846. .common
  847.     subi.w    #125,D1                Not supported !!!!
  848.     bmi.s    .error
  849.     bra.w    .comref
  850.  
  851. .done
  852.     bsr.w    _GetCurrentHunk            Get next hunk
  853.     bra.w    _HunkAnalyse            and re-run
  854.  
  855. .error
  856.     moveq    #-1,D0
  857.     rts
  858.  
  859. * ################################################################
  860.  
  861. _HunkSymbol
  862.     bra.w    _HunkExtern
  863.  
  864. * ################################################################
  865.  
  866. _HunkDebug
  867.     bra.w    _HunkCode
  868.  
  869. * ################################################################
  870.  
  871. _HunkEnd
  872. *    bsr.w    _PrintOneTab
  873.  
  874. *    move.l    A0,-(sp)
  875. *    bsr.w    _SPrintF
  876. *    addq.l    #4,sp
  877.  
  878.     move.l    _HunkNo(A5),D2            Give out 'end of hunk number n'
  879.     move.l    D2,-(sp)
  880.     pea    _EndHunkStr(pc)
  881.     bsr.w    _SPrintF
  882.     addq.l    #8,sp
  883.     addq.l    #1,D2
  884.     move.l    D2,_HunkNo(A5)            and increase hunk-number
  885.  
  886.     move.l    A6,-(sp)
  887.     moveq    #0,D0
  888.     move.l    #SIGBREAKF_CTRL_C,D1
  889.     movea.l    _SysBase(A5),A6
  890.     jsr    _LVOSetSignal(A6)
  891.     andi.l    #SIGBREAKF_CTRL_C,D0
  892.     movea.l    (sp)+,A6
  893.     bne.s    .break
  894.  
  895. *    bsr.w    _PrintLF
  896.  
  897.     bsr.w    _GetCurrentHunk
  898.     cmpi.l    #-1,D0
  899.     beq.s    .done
  900.     bra.w    _HunkAnalyse
  901. .done
  902.     moveq    #0,D0
  903.     rts
  904.  
  905. .break
  906.     pea    _BreakStr(pc)
  907.     bsr.w    _SPrintF
  908.     addq.l    #4,sp
  909.     bra.w    _close
  910.  
  911. * ################################################################
  912.  
  913. _HunkHeader
  914.     bsr.w    _PrintOneTab
  915.  
  916.     move.l    A0,-(sp)
  917.     bsr.w    _SPrintF
  918.     addq.l    #4,sp
  919.  
  920.     bsr.w    _PrintLF
  921.  
  922.     bsr.w    _GetCurrentHunk            Length name
  923.     cmpi.l    #-1,D0
  924.     beq.w    .error
  925.     tst.l    D0
  926.     beq.s    .nameset
  927.  
  928.     move.l    _HunkSize(A5),D0
  929.     bsr.w    _GetHunkName
  930.     cmpi.l    #-1,D0
  931.     beq.w    .error
  932.  
  933.     pea    _HunkNameBuf(A5)
  934.     pea    _NameStr(pc)
  935.     bsr.w    _SPrintF
  936.     addq.l    #8,sp
  937.  
  938. .nameset
  939.     bsr.w    _GetHunkLength            Number of hunks
  940.     cmpi.l    #-1,D0
  941.     beq.w    .error
  942.     move.l    D0,D4
  943.  
  944.     bsr.w    _GetHunkLength            First
  945.     cmpi.l    #-1,D0
  946.     beq.w    .error
  947.     move.l    D0,D5
  948.  
  949.     bsr.w    _GetHunkLength            Last
  950.     cmpi.l    #-1,D0
  951.     beq.w    .error
  952.     move.l    D0,D6
  953.  
  954.     move.l    D0,-(sp)
  955.     move.l    D5,-(sp)
  956.     move.l    D4,-(sp)
  957.     pea    _ExeHeadStr(pc)
  958.     bsr.w    _SPrintF
  959.     lea    16(sp),sp
  960.  
  961.     sub.l    D5,D6                Last - first
  962.     move.l    D6,D4
  963.  
  964. .loop
  965.     bsr.w    _GetHunkLength            Size in bytes of this hunk
  966.     cmpi.l    #-1,D0
  967.     beq.s    .error
  968.  
  969.     move.l    D0,D6
  970.  
  971.     lsl.l    #2,D0
  972.     move.l    D0,-(sp)
  973.     move.l    D5,-(sp)
  974.     pea    _HunkHeadStr(pc)        Give out size
  975.     bsr.w    _SPrintF
  976.     lea     12(sp),sp
  977.  
  978. .testFast        ;            Check the set memory-flags...
  979.     btst    #31,D6
  980.     beq.s    .testChip
  981.  
  982.     pea    _HunkFastStr(pc)
  983.     bsr.w    _SPrintF
  984.     addq.l    #4,sp
  985.  
  986. .testChip
  987.     btst    #30,D6
  988.     beq.s    .testAdvi
  989.     
  990.     pea    _HunkChipStr(pc)
  991.     bsr.w    _SPrintF
  992.     addq.l    #4,sp
  993.  
  994. .testAdvi
  995.     btst    #29,D6
  996.     beq.s    .testDone
  997.  
  998.     pea    _HunkAdviStr(pc)
  999.     bsr.w    _SPrintF
  1000.     addq.l    #4,sp
  1001.  
  1002. .testDone
  1003.     bsr.w    _PrintLF
  1004.  
  1005.     addq.w    #1,D5
  1006.     subq.w    #1,D4
  1007.     bpl.s    .loop    
  1008.  
  1009.     bsr.w    _PrintLF
  1010.     bsr.w    _GetCurrentHunk            Get next hunk
  1011.     bra.w    _HunkAnalyse            and re-run
  1012.  
  1013. .error
  1014.     moveq    #-1,D0
  1015.     rts
  1016.  
  1017. * ################################################################
  1018.  
  1019. _HunkUnknown
  1020.     moveq    #-1,D0                Error !!!
  1021.     rts
  1022.  
  1023. * ################################################################
  1024.  
  1025. _HunkOverlay
  1026.     bsr.w    _PrintOneTab
  1027.  
  1028.     move.l    A0,-(sp)
  1029.     bsr.w    _SPrintF
  1030.     addq.l    #4,sp
  1031.  
  1032.     bsr.w    _PrintLF
  1033.  
  1034.     bsr.w    _GetCurrentHunk
  1035.     cmpi.l    #-1,D0
  1036.     beq.s    .error
  1037.     move.l    D0,D4                Table size
  1038.  
  1039.     bsr.w    _GetCurrentHunk
  1040.     cmpi.l    #-1,D0
  1041.     beq.s    .error
  1042.     move.l    D0,D5                Max. level
  1043.  
  1044.     bsr.w    _GetCurrentHunk
  1045.     cmpi.l    #-1,D0
  1046.     beq.s    .error
  1047.     move.l    D0,D6                Amount datas
  1048.  
  1049.     move.l    D6,-(sp)
  1050.     move.l    D5,-(sp)
  1051.     move.l    D4,-(sp)
  1052.     pea    _OverlayStr(pc)
  1053.     bsr.w    _SPrintF
  1054.     lea    16(sp),sp
  1055.  
  1056.     subq.l    #1,D4                Table size minus 1
  1057.     move.l    D4,D0
  1058.     bsr.w    _SkipHunk            Overread table
  1059.  
  1060.     bsr.w    _PrintLF
  1061.     bsr.w    _GetCurrentHunk            Get next hunk
  1062.     bra.w    _HunkAnalyse            and re-run
  1063.  
  1064. .error
  1065.     moveq    #-1,D0
  1066.     rts
  1067.  
  1068. * ################################################################
  1069.  
  1070. _HunkBreak
  1071. *    bsr.w    _PrintOneTab
  1072.  
  1073. *    move.l    A0,-(sp)
  1074. *    bsr.w    _SPrintF
  1075. *    addq.l    #4,sp
  1076.  
  1077. *    bsr.w    _PrintLF
  1078.  
  1079.     bsr.w    _GetCurrentHunk            Get next hunk
  1080.     cmpi.l    #-1,D0
  1081.     beq.s    .done                If an error occurred...
  1082.     bra.w    _HunkAnalyse            else re-run
  1083. .done
  1084.     moveq    #0,D0                End of file reached...
  1085.     rts
  1086.  
  1087. * ################################################################
  1088.  
  1089. _HunkDRel32
  1090.     bsr.w    _PrintOneTab
  1091.  
  1092.     move.l    A0,-(sp)
  1093.     bsr.w    _SPrintF
  1094.     addq.l    #4,sp
  1095.  
  1096.     bsr.w    _PrintLF
  1097.  
  1098.     moveq    #0,D5
  1099.  
  1100. .relloop
  1101.     bsr.w    _GetHunkLength            Amount words in high-word
  1102.     cmpi.l    #-1,D0
  1103.     beq.w    .error
  1104.  
  1105.     swap    D0
  1106.     tst.w    D0
  1107.     beq.s    .done                No more relocations any more
  1108.     swap    D0
  1109.  
  1110.     move.l    D0,D1
  1111.     swap    D0
  1112.     andi.l    #$FFFF,D0            Amount relocations
  1113.     add.l    D0,_Relocs(A5)
  1114.     andi.l    #$FFFF,D1            Hunk number relocation related to
  1115.  
  1116.     move.l    D0,D4
  1117.  
  1118.     move.l    D1,-(sp)
  1119.     move.l    D4,-(sp)
  1120.     pea    _AmountStr(pc)
  1121.     bsr.w    _SPrintF
  1122.     lea    12(sp),sp
  1123.  
  1124.     move.l    _FileHandle(A5),D1
  1125.     move.l    D4,D2
  1126.     lsl.l    #1,D2                Words into bytes
  1127.     add.l    D2,D5                Amount bytes
  1128.     moveq    #OFFSET_CURRENT,D3
  1129.     jsr    _LVOSeek(A6)            Overread relocations
  1130.  
  1131.     bra.s    .relloop
  1132.  
  1133. .done
  1134.     move.l    D5,D2                Bytes of datas ignored
  1135.     addq.l    #3,D2
  1136.     andi.l    #-4,D2                Modulo 4
  1137.     sub.l    D5,D2                Even or odd amount of datas ignored (longword aligned?)
  1138.     beq.s    .realdone
  1139.  
  1140.     move.l    _FileHandle(A5),D1
  1141.     moveq    #-2,D2
  1142.     moveq    #OFFSET_CURRENT,D3
  1143.     jsr    _LVOSeek(A6)            Was odd, thus we are one word too far
  1144.  
  1145. .realdone
  1146.     bsr.w    _GetCurrentHunk            Get next hunk
  1147.     bra.w    _HunkAnalyse            and re-run
  1148.  
  1149. .error
  1150.     moveq    #-1,D0
  1151.     rts
  1152.  
  1153. * ################################################################
  1154.  
  1155. _HunkDRel16
  1156.     bra.w    _HunkDRel32
  1157.  
  1158. * ################################################################
  1159.  
  1160. _HunkDRel8
  1161.     bra.w    _HunkDRel32
  1162.  
  1163. * ################################################################
  1164.  
  1165. _HunkLib
  1166.     moveq    #0,D0                Not supported !!!!
  1167.     rts
  1168.  
  1169. * ################################################################
  1170.  
  1171. _HunkIndex
  1172.     moveq    #0,D0                Not supported !!!!
  1173.     rts
  1174.  
  1175. * ################################################################
  1176.  
  1177. _HunkReloc32Short
  1178.     bra.w    _HunkDRel32
  1179.  
  1180. * ################################################################
  1181.  
  1182. _HunkRelReloc32
  1183.     moveq    #0,D0                Not supported !!!!
  1184.     rts
  1185.  
  1186. * ################################################################
  1187.  
  1188. _HunkRelReloc16
  1189.     moveq    #0,D0                Not supported !!!!
  1190.     rts
  1191.  
  1192. * ################################################################
  1193.  
  1194. _SPrintF    ; C-printf alike, only different that words can be dropped. Requires reverse arguments on stack.
  1195.     move.l    A6,-(sp)
  1196.     move.l    D3,-(sp)
  1197.     move.l    D2,-(sp)
  1198.  
  1199.     moveq    #0,D0
  1200.     move.l    D0,_SPBufCnt(A5)        No chars in SPBuffer
  1201.  
  1202.     move.l    3*4+4(sp),A0            Text
  1203.     lea    3*4+8(sp),A1            Fmt
  1204.     lea    _SPHook(pc),A2            Procedure
  1205.     movea.l    A5,A3                Table
  1206.     movea.l    _SysBase(A5),A6
  1207.     jsr    _LVORawDoFmt(A6)        Format them
  1208.  
  1209.     tst.l    _CacheFlag(A5)            Did we use the 'Cache'
  1210.     beq.s    0$
  1211.  
  1212.     move.l    _CachedSize(A5),D0        Amount bytes stored in register D0
  1213.     cmpi.w    #FlushSize,D0            'Cache' full
  1214.     bls.s    1$
  1215.  
  1216.     bsr.w    _FlushCache            As it says...
  1217.     bra.s    1$
  1218.  
  1219. 0$
  1220.     move.l    _SPBufCnt(A5),D3
  1221.     subq.w    #1,D3
  1222.     bmi.s    1$
  1223.     beq.s    1$
  1224.     move.l    _stdout(A5),D1            Console or file
  1225.     lea    _SPBuffer(A5),A0        Address datas
  1226.     move.l    A0,D2                to D2
  1227.     movea.l    _DOSBase(A5),A6
  1228.     jsr    _LVOWrite(A6)            Write 'em
  1229. 1$
  1230.     move.l    (sp)+,D2
  1231.     move.l    (sp)+,D3
  1232.     movea.l    (sp)+,A6
  1233.     rts                    Back
  1234.  
  1235. _SPHook
  1236.     move.l    A5,-(sp)
  1237.     movea.l    A3,A5
  1238.  
  1239.     tst.l    _CacheFlag(A5)
  1240.     bne.s    3$
  1241.  
  1242.     move.l    _SPBufCnt(A5),D1
  1243.     cmpi.l    #77,D1
  1244.     bls.s    1$
  1245.  
  1246.     movem.l    D0/D2-D3/A6,-(sp)        Overflow of SPBuffer not very far...
  1247.  
  1248.     move.l    _stdout(A5),D1
  1249.     lea    _SPBuffer(A5),A0
  1250.     move.l    A0,D2
  1251.     move.l    _SPBufCnt(A5),D3
  1252.     movea.l    _DOSBase(A5),A6
  1253.     jsr    _LVOWrite(A6)            Flush SPBuffer
  1254.  
  1255.     moveq    #0,D0                No characters in SPBuffer
  1256.     move.l    D0,_SPBufCnt(A5)
  1257.  
  1258.     movem.l    (sp)+,D0/D2-D3/A6
  1259. 1$
  1260.     lea    _SPBuffer(A5),A0
  1261.     move.l    _SPBufCnt(A5),D1
  1262.     move.b    D0,0(A0,D1.w)
  1263.     addq.b    #1,D1
  1264.     move.l    D1,_SPBufCnt(A5)
  1265. 2$
  1266.     movea.l    (sp)+,A5
  1267.     rts
  1268. 3$
  1269.     tst.b    D0
  1270.     beq.s    2$
  1271.     movea.l    _StrCache(A5),A0
  1272.     move.l    _CachedSize(A5),D1
  1273.     move.b    D0,0(A0,D1.w)
  1274.     addq.w    #1,D1
  1275.     move.l    D1,_CachedSize(A5)
  1276.     bra.s    2$
  1277.  
  1278. * ################################################################
  1279.  
  1280. _PrintResult
  1281.     tst.l    _FileType(A5)
  1282.     beq.w    .done
  1283.  
  1284.     tst.l    _Relocs(A5)
  1285.     beq.w    .PCRelative
  1286.  
  1287.     move.l    _Relocs(A5),D1
  1288.     move.l    _ByteSize(A5),D0
  1289.     divu.w    D1,D0
  1290.     cmpi.w    #999,D0
  1291.     bhi.s    .bloodygood
  1292.     cmpi.w    #250,D0
  1293.     bhi.s    .well
  1294.     cmpi.w    #125,D0
  1295.     bhi.s    .ok
  1296.     cmpi.w    #70,D0
  1297.     bhi.s    .notgood
  1298. .bad
  1299.     pea    _R6Str(pc)
  1300.     bsr.w    _SPrintF
  1301.     addq.l    #4,sp
  1302.     bra.s    .done
  1303. .notgood
  1304.     moveq    #14,D0
  1305.     pea    _R5Str(pc)
  1306.     move.l    D0,-(sp)
  1307.     pea    _R0Str(pc)
  1308.     bsr.w    _SPrintF
  1309.     lea    16(sp),sp
  1310.     bra.s    .done
  1311. .ok
  1312.     moveq    #8,D0
  1313.     pea    _R4Str(pc)
  1314.     move.l    D0,-(sp)
  1315.     pea    _R0Str(pc)
  1316.     bsr.w    _SPrintF
  1317.     lea    16(sp),sp
  1318.     bra.s    .done
  1319. .well
  1320.     moveq    #4,D0
  1321.     pea    _R3Str(pc)
  1322.     move.l    D0,-(sp)
  1323.     pea    _R0Str(pc)
  1324.     bsr.w    _SPrintF
  1325.     lea    16(sp),sp
  1326.     bra.s    .done
  1327. .bloodygood
  1328.     moveq    #1,D0
  1329.     pea    _R2Str(pc)
  1330.     move.l    D0,-(sp)
  1331.     pea    _R0Str(pc)
  1332.     bsr.w    _SPrintF
  1333.     lea    16(sp),sp
  1334.     bra.s    .done
  1335. .PCRelative
  1336.     pea    _R1Str(pc)
  1337.     bsr.w    _SPrintF
  1338.     addq.l    #4,sp
  1339.  
  1340. .done
  1341.     rts
  1342.  
  1343.  
  1344. * ################################################################
  1345.  
  1346. _HunkNames
  1347.     dc.b    'HUNK_UNIT        ',0        ; 3E7
  1348.     dc.b    'HUNK_NAME        ',0        ; 3E8
  1349.     dc.b    'HUNK_CODE        ',0        ; 3E9
  1350.     dc.b    'HUNK_DATA        ',0        ; 3EA
  1351.     dc.b    'HUNK_BSS         ',0        ; 3EB
  1352.     dc.b    'HUNK_RELOC32     ',0        ; 3EC
  1353.     dc.b    'HUNK_RELOC16     ',0        ; 3ED
  1354.     dc.b    'HUNK_RELOC8      ',0        ; 3EE
  1355.     dc.b    'HUNK_EXTERN      ',0        ; 3EF    *
  1356.     dc.b    'HUNK_SYMBOL      ',0        ; 3F0
  1357.     dc.b    'HUNK_DEBUG       ',0        ; 3F1
  1358.     dc.b    'HUNK_END         ',0        ; 3F2
  1359.     dc.b    'HUNK_HEADER      ',0        ; 3F3
  1360.     dc.b    '-#-#-#-#-#-#-    ',0        ; 3F4
  1361.     dc.b    'HUNK_OVERLAY     ',0        ; 3F5
  1362.     dc.b    'HUNK_BREAK       ',0        ; 3F6
  1363.     dc.b    'HUNK_DREL32      ',0        ; 3F7
  1364.     dc.b    'HUNK_DREL16      ',0        ; 3F8
  1365.     dc.b    'HUNK_DREL8       ',0        ; 3F9
  1366.     dc.b    'HUNK_LIB         ',0        ; 3FA
  1367.     dc.b    'HUNK_INDEX       ',0        ; 3FB
  1368.     dc.b    'HUNK_RELOC32SHORT',0        ; 3FC
  1369.     dc.b    'HUNK_RELRELOC32  ',0        ; 3FD    *
  1370.     dc.b    'HUNK_RELRELOC16  ',0        ; 3FE    *
  1371.  
  1372. * ################################################################
  1373.  
  1374. _ExtNames
  1375.     dc.b    'EXT_SYMBOL  ',0
  1376.     dc.b    'EXT_DEFINT  ',0
  1377.     dc.b    'EXT_ABSOLUTE',0
  1378.     dc.b    'EXT_RESIDENT',0
  1379.     dc.b    'EXT_ABSREF32',0
  1380.     dc.b    'EXT_COMMON  ',0
  1381.     dc.b    'EXT_PC_REF16',0
  1382.     dc.b    'EXT_PC_REF8 ',0
  1383.     dc.b    'EXT_DATREL32',0
  1384.     dc.b    'EXT_DATREL16',0
  1385.     dc.b    'EXT_DATREL8 ',0
  1386.     dc.b    'EXT_PC_REL32',0
  1387.     dc.b    'EXT_RELCOM32',0
  1388.     dc.b    'EXT_ABSREF16',0
  1389.     dc.b    'EXT_ABSREF8 ',0
  1390.  
  1391. * ################################################################
  1392.  
  1393. _ExeObjStr
  1394.     dc.b    'Hunk layout of AmigaDOS load file "%s" (%ld bytes filesize)',10,0
  1395. _LnkObjStr
  1396.     dc.b    'Hunk layout of linker object file "%s" (%ld bytes filesize)',10,0
  1397. _NameStr
  1398.     dc.b    9,'%s',0
  1399. _OffsetStr
  1400.     dc.b    9,'related to offset 0x%lx',0
  1401. _RefStr
  1402.     dc.b    9,'%ld reference(s)',0
  1403. _DefDecStr
  1404.     dc.b    9,'= %ld',0
  1405. _DefHexStr
  1406.     dc.b    9,'= 0x%lx',0
  1407. _CorrectStr
  1408.     dc.b    ', 0x%lx',0
  1409. _CodeStr
  1410.     dc.b    '%ld bytes',0
  1411. _AmountStr
  1412.     dc.b    9,9,'%4ld short relocation(s) for hunk #%ld',10,0
  1413. _ErrorStr
  1414.     dc.b    'A hunk error encountered! File not valid!',10,0
  1415. _OkStr
  1416.     dc.b    'Done.',10,0
  1417. _ExeHeadStr
  1418.     dc.b    9,9,'Number of hunks: %ld. First hunk to load #%ld, last hunk to load #%ld.',10,0
  1419. _HunkHeadStr
  1420.     dc.b    9,9,'-> Hunk #%ld requires a storage of %ld bytes.',0
  1421. _HunkChipStr
  1422.     dc.b    9,'» Hunk will be forced to CHIP-memory.',0
  1423. _HunkFastStr
  1424.     dc.b    9,'» Hunk will be forced to FAST-memory.',0
  1425. _HunkAdviStr
  1426.     dc.b    9,'» Hunk has got the ADVISORY bit set.',0
  1427. _Reloc32Str
  1428.     dc.b    9,9,'%4ld long relocation(s) for hunk #%ld',10,0
  1429. _StartHunkStr
  1430.     dc.b    10,'--- Starting with hunk #0 ----------',10,10,0
  1431. _EndHunkStr
  1432.     dc.b    10,'--- End of hunk #%ld -----------------',10,10,0
  1433. _OverlayStr
  1434.     dc.b    9,9,'%ld table entries, %ld overrides with %ld bytes of data',0
  1435.  
  1436. * ################################################################
  1437.  
  1438. _R0Str
  1439.     dc.b    10,'DropHunk''s rating: Less than or equal to %ld relocations per 1000 bytes.',10,'»» %s',10,10,0
  1440. _R1Str
  1441.     dc.b    10,'DropHunk''s rating: Position-independent code, bloody well done; Assembler used?',10,10,0
  1442. _R2Str
  1443.     dc.b    'Very well done; Assembler used?',0
  1444. _R3Str
  1445.     dc.b    'Yes, nothing against it; strong compiler used.',0
  1446. _R4Str
  1447.     dc.b    'Good average; compiler is ok.',0
  1448. _R5Str
  1449.     dc.b    'So - so, too many relocations; standard compiler - not too good.',0
  1450. _R6Str
  1451.     dc.b    10,'DropHunk''s rating: bad code - too many relocations; use an other compiler!',10,10,0
  1452.  
  1453. * ################################################################
  1454. _BreakStr
  1455.     dc.b    10,'*** Break',10,0
  1456. _Ver
  1457.     dc.b    '$VER: DropHunk 1.0 (29.11.98) Copyright ONIX',0
  1458.  
  1459.     END